package com.hy;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:查询后矩阵的和
 * 给你一个整数n和一个下标从 0开始的 二维数组queries，
 * 其中queries[i] = [typei, indexi,vali]。
 *
 * 一开始，给你一个下标从 0开始的n x n矩阵，所有元素均为 0。每一个查询，
 * 你需要执行以下操作之一：
 *
 * 如果typei == 0，将第indexi行的元素全部修改为vali，覆盖任何之前的值。
 * 如果typei == 1，将第indexi列的元素全部修改为 vali，覆盖任何之前的值。
 * 请你执行完所有查询以后，返回矩阵中所有整数的和。
 *
 * author: Mr.Du
 * Date: 2023/6/5
 * Time: 21:26
 */
public class MatrixSumQueries {


    public long matrixSumQueries(int n, int[][] queries) {
        boolean[] rows = new boolean[n];
        boolean[] cols = new boolean[n];
        long res = 0, row = n, col = n;
        int m = queries.length - 1, s = queries[0].length;
        for(int i = m;i >= 0;i--){
            if(queries[i][0] == 0 && !rows[queries[i][1]]){
                res += row * queries[i][2];
                rows[queries[i][1]]= true;
                col--;
            }else if(queries[i][0] == 1 && !cols[queries[i][1]]){
                res += col * queries[i][2];
                cols[queries[i][1]] = true;
                row--;
            }
        }
        return res;

    }

    // 垃圾做法
    // 用二维数组记录会超时，只能用一维数组记录
    public long matrixSumQueries1(int n, int[][] queries) {
        boolean[][] arr = new boolean[n][n];
        long[][] nums = new long[n][n];
        long res = 0;
        int m = queries.length - 1, s = queries[0].length;
        for(int i = m;i >= 0;i--){
            if(i == queries.length - 1){
                if(queries[i][0] == 0){
                    for(int j = 0;j < n;j++){
                        nums[queries[i][1]][j] = queries[i][2];
                        res += queries[i][2];
                        arr[queries[i][1]][j] = true;
                    }
                }else{
                    for(int j = 0;j < n;j++){
                        nums[j][queries[i][1]] = queries[i][2];
                        res += queries[i][2];
                        arr[j][queries[i][1]] = true;
                    }
                }
            }
            if(queries[i][0] == 0){
                for(int j = 0;j < n;j++){
                    if(arr[queries[i][1]][j]) continue;
                    nums[queries[i][1]][j] = queries[i][2];
                    res += queries[i][2];
                    arr[queries[i][1]][j] = true;
                }
            }else{
                for(int j = 0;j < n;j++){
                    if(arr[j][queries[i][1]]) continue;
                    nums[j][queries[i][1]] = queries[i][2];
                    res += queries[i][2];
                    arr[j][queries[i][1]] = true;
                }
            }
        }
        return res;
    }

}
